//
// Created by Jisam on 27/08/2024 8:21 PM.
// Solution of  P1080 [NOIP2012 提高组] 国王游戏
//#pragma GCC optimize(3)
#include <bits/stdc++.h>

using namespace std;
#define endl "\n"
#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>
#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
#define code_by_jisam ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128;
int dx[] = {-1, 1, 0, 0, 1, 1, -1, -1,};
int dy[] = {0, 0, -1, 1, 1, -1, -1, 1,};

// 定义结构体节点，用于存储大臣的信息和计算结果
struct node{
    int a, b; // 大臣的左右手的金币数
    char cnta[10000], all[10000]; // cnta 存储前面所有大臣左手金币数的乘积的逆序，all 存储正序
    char ca[100]; // 将大臣左手金币数转化为字符数组
    char ans[10000]; // 计算出的大臣能获得的金币数，以字符数组形式存储
    int lans; // ans 数组的有效长度
}da[1001]; // 存储所有大臣的信息

// 比较函数，用于排序大臣，使其按照左右手金币数的乘积升序排列
bool cmp(node a, node b){
    return a.a*a.b < b.a*b.b;
}

// 高精度比较函数，用于比较两个大臣能获得的金币数
bool cmp2(node a, node b){
    if(a.lans != b.lans)
        return a.lans > b.lans;
    else{
        int i;
        for(i=0; i<a.lans; i++)
            if(a.ans[i] != b.ans[i])
                return a.ans[i] > b.ans[i];
        return true; // 如果完全相等，返回 true
    }
}

// 将整数 a 转化为字符数组 b
void doit(int a, char b[]){
    int lb=0;
    while(a>0){
        b[lb++]=a%10+'0';
        a/=10;
    }
    b[lb]='\0';
}

// 错位相加函数，将两个字符数组表示的数字相加
void add(char c[], char d[], int i){
    int lc=strlen(c), j;
    int jw = 0, tmp;
    for(j=0; j<lc; j++, i++){
        tmp = (d[i]>0?d[i]-'0':0) + c[j] - '0' + jw;
        d[i] = tmp % 10 + '0';
        jw = tmp / 10;
    }
    if(jw){
        d[i++] = jw + '0';
    }
    d[i]='\0';
}

// 高精度乘法函数，计算两个字符数组表示的数字的乘积
void gc(char a[], char b[], char d[]){
    int la=strlen(a), lb=strlen(b);
    int i, j;
    char c[10000]; // 记录乘数的每一位乘以被乘数的积
    for(i=0; i<la; i++){
        int tmp;
        int jw = 0, lc = 0;
        for(j=0; j<lb; j++){
            tmp = (a[i]-'0') * (b[j]-'0') + jw;
            c[lc++] = tmp % 10 + '0';
            jw = tmp / 10;
        }
        if(jw) c[lc++] = jw + '0';
        c[lc]='\0';
        add(c, d, i);
    }
}

// 除法函数，计算字符数组 a 表示的数字除以整数 b 的商，结果保存在字符数组 c 中
void mult(char a[], int b, char c[]){
    int i = 0, tag = 0, la = strlen(a), lc = 0;
    int d = 0;
    while(i<=la){
        if(b>d){
            d = d*10 + a[i++] - '0';
            if(tag) c[lc++] = '0';
        }else{
            c[lc++] = d/b + '0';
            d = d%b;
            d = d*10 + a[i++] - '0';
            tag = 1;
        }
    }
    if(tag==0) c[lc++] = '0';
    c[lc]='\0';
}

// 主函数
int main(){
    int n, i, j;
    memset(da, 0, sizeof(da));
    scanf("%d", &n);
    scanf("%d%d", &da[0].a, &da[0].b);
    for(i=1; i<=n; i++){
        scanf("%d%d", &da[i].a, &da[i].b);
    }
    sort(da+1, da+n+1, cmp);
    doit(da[0].a, da[0].ca);
    da[0].cnta[0] = '1';
    da[0].cnta[1] = '\0';
    for(i=1; i<=n; i++){
        doit(da[i].a, da[i].ca);
        gc(da[i-1].cnta, da[i-1].ca, da[i].cnta);
    }
    for(i=1; i<=n; i++){
        int k=0;
        for(j=strlen(da[i].cnta)-1; j>=0; j--)
            da[i].all[k++] = da[i].cnta[j];
        da[i].all[k]='\0';
    }
    for(i=1; i<=n; i++){
        mult(da[i].all, da[i].b, da[i].ans);
        da[i].lans = strlen(da[i].ans);
    }
    int ans = 1;
    for(i=2; i<=n; i++){
        if(!cmp2(da[ans], da[i]))
            ans=i;
    }
    printf("%s\n", da[ans].ans);
    return 0;
}
